using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using EYDIngenieria.ERP.Aplicacion.Gestion;
using EYDIngenieria.ERP.Aplicacion.Mantenedores;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;

public partial class Gestion_Default : System.Web.UI.Page
{

    private MantenedorProducto mantenedorProducto = new MantenedorProducto();
    private MantenedorCliente mantenedorCliente = new MantenedorCliente();
    private MantenedorFamiliaProducto mantenedorFamiliaProducto = new MantenedorFamiliaProducto();
    private GestionOrdenDeTrabajo gestionOrdenDeTrabajo = new GestionOrdenDeTrabajo();
    private MantenedorEstadoOrdenDeTrabajo mantenedorEstadoOrdenesDeTrabajo = new MantenedorEstadoOrdenDeTrabajo();
    private GestionInventario gestionInventario = new GestionInventario();
    private Cliente[] Clientees;
    private MedioDePago[] mediosDePago;
    private FamiliaProducto[] familiasDeProducto;
    private Producto[] productos;
    private EstadoOrdenDeTrabajo ingresado;
    private OrdenDeTrabajo ot = new OrdenDeTrabajo();
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session.Keys.Count == 0)
            Response.Redirect("../Default.aspx");

       
        if (!IsPostBack)
        {
            gdvOrdenesDeTrabajo.DataSource = gestionOrdenDeTrabajo.Listar(mantenedorEstadoOrdenesDeTrabajo.Buscar("R")[0]);
            gdvOrdenesDeTrabajo.DataBind();
            Session.Add("ot", ot);
            dtlDetalleOrdenDeTrabajo.DataSource = ot.Detalle;
            dtlDetalleOrdenDeTrabajo.DataBind();
            ddlCliente.DataTextField = "RazonSocial";
            ddlCliente.DataValueField = "Id";
            Clientees = mantenedorCliente.Listar();
            ddlCliente.DataSource = Clientees;
            ddlCliente.DataBind();
            ListItem li = new ListItem("Seleccione","0");
            ddlCliente.Items.Insert(0,li);
           

            ddlFamilia.DataTextField = "Nombre";
            ddlFamilia.DataValueField = "Id";
            familiasDeProducto = mantenedorFamiliaProducto.Listar();
            
            ddlFamilia.DataSource = familiasDeProducto;
            ddlFamilia.DataBind();
            li = new ListItem("Seleccione","0");
            ddlFamilia.Items.Insert(0,li);

            ddlProducto.DataTextField = "Descripcion";
            ddlProducto.DataValueField = "Id";
            ddlProducto.DataSource = productos;
            ddlProducto.DataBind();
            ddlProducto.Items.Insert(0, li);
            //txbFecha.Text = DateTime.Now.ToShortDateString();
        }
    }

    protected void ddlFamilia_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(ddlFamilia.SelectedIndex == 0)
            return;
        ddlProducto.Items.Clear();
        FamiliaProducto f = new FamiliaProducto();
        f.Id = Int16.Parse(((DropDownList)sender).SelectedValue);
        Inventario[] inventario = gestionInventario.ListarInventarioDeFamilia(f);
        ListItem liProducto;
        foreach (Inventario i in inventario)
        {
            liProducto = new ListItem(i.Producto.Codigo + "-" + i.Producto.Nombre, i.Producto.Id.ToString());
            ddlProducto.Items.Add(liProducto);
        }
        
        ListItem li = new ListItem("Seleccione", "0");
        ddlProducto.Items.Insert(0, li);
    }
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        double stockDeProducto = (double) Session["StockDeProducto"];
        if (double.Parse(txbCantidad.Text) > stockDeProducto)
        {
            rfvCantidad.Text = "Maximo :" + stockDeProducto.ToString();
            rfvCantidad.IsValid = false;
            return;
        }
        else
        {
            rfvCantidad.Text = "Requerido";
            rfvCantidad.IsValid = true;
        }
        DetalleOrdenDeTrabajo detalle = new DetalleOrdenDeTrabajo();
        int idProducto = Int16.Parse(ddlProducto.SelectedValue);
        Producto p = mantenedorProducto.Obtener(idProducto);
        detalle.Producto = p;
        //if (int.Parse(txbCantidad.Text) > p.Stock)
        //    return;
        detalle.Cantidad = double.Parse(txbCantidad.Text);
        detalle.Cantidad = double.Parse(txbCantidad.Text);
        OrdenDeTrabajo ot = ((OrdenDeTrabajo)Session["ot"]);
        ot.Detalle.Add(detalle);
        dtlDetalleOrdenDeTrabajo.DataSource = ot.Detalle;
        dtlDetalleOrdenDeTrabajo.DataBind();
        txbCantidad.Text = string.Empty;

    }
    protected void botonAceptar_Click(object sender, EventArgs e)
    {
        
        //if(gdvOrdenesDeTrabajo.SelectedIndex<=0)
        //    return;
        OrdenDeTrabajo ot = ((OrdenDeTrabajo)Session["ot"]) ?? new OrdenDeTrabajo();
        ot.NumeroOrdenDeTrabajo = int.Parse(txbNumero.Text);
        OrdenDeTrabajo[] ordenes = gestionOrdenDeTrabajo.Bucar(ot.NumeroOrdenDeTrabajo);
        
        cvlNumero.IsValid = true;
        if (ordenes.Length > 0)
        {
            if (ordenes[0].Id != ot.Id)
            {   
                cvlNumero.IsValid = false;
                return;
            }
            
        }
        ot.Fecha = DateTime.Now;
        ot.FechaFacturacion = DateTime.Now;
        ot.Descripcion = txbDescripcion.Text;
        ot.Estado = mantenedorEstadoOrdenesDeTrabajo.Buscar("A")[0];
        ot.Monto = 0;//double.Parse(txbMonto.Text); 
        
        Cliente cliente = mantenedorCliente.Obtener(Int16.Parse(ddlCliente.SelectedValue));
        ot.Cliente = cliente;
        

        if (ot.Id ==0)
        
            gestionOrdenDeTrabajo.GuardarOrdenDeTrabajo(ot);
        else
            gestionOrdenDeTrabajo.Modificar(ot);
       
        Limpiar();

        gdvOrdenesDeTrabajo.DataSource = gestionOrdenDeTrabajo.Listar(mantenedorEstadoOrdenesDeTrabajo.Buscar("R")[0]);
        gdvOrdenesDeTrabajo.DataBind();
        Limpiar();
    }

    private void Limpiar()
    {
        dtlDetalleOrdenDeTrabajo.DataSource = null;
        dtlDetalleOrdenDeTrabajo.DataBind();
        txbDescripcion.Text = string.Empty;
        txbNumero.Text = string.Empty;
    }

    protected void gdvOrdenesDeTrabajo_SelectedIndexChanged(object sender, EventArgs e)
    {     
        GridView grilla = ((GridView)sender);
        int id = int.Parse(grilla.SelectedDataKey.Value.ToString());
        OrdenDeTrabajo ot = gestionOrdenDeTrabajo.Obtener(id);
        dtlDetalleOrdenDeTrabajo.DataSource = ot.Detalle;
        dtlDetalleOrdenDeTrabajo.DataBind();
        ddlCliente.SelectedValue = ot.Cliente.Id.ToString();
        txbNumero.Text = ot.NumeroOrdenDeTrabajo.ToString();
        //txbMonto.Text = ot.Monto.ToString();
        txbDescripcion.Text = ot.Descripcion;
        Session["ot"] = ot;
        btnEliminar.Enabled = gdvOrdenesDeTrabajo.SelectedIndex >= 0;
    }
    protected void btnBorrar_Click(object sender, EventArgs e)
    {

        OrdenDeTrabajo f = ((OrdenDeTrabajo)Session["ot"]);
        int id = int.Parse(((System.Web.UI.WebControls.LinkButton)(sender)).CommandArgument);
        foreach (DetalleOrdenDeTrabajo detalle in f.Detalle)
        {
            if (detalle.Producto.Id == id)
            {
                f.Detalle.Remove(detalle);
                dtlDetalleOrdenDeTrabajo.DataSource = f.Detalle;
                dtlDetalleOrdenDeTrabajo.DataBind();
                Session["ot"] = f;
                return;

            }
        }
    }
   
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        Limpiar();
        gdvOrdenesDeTrabajo.SelectedIndex = -1;
        Session["ot"] = new OrdenDeTrabajo();
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        gestionOrdenDeTrabajo.Eliminar((OrdenDeTrabajo)Session["ot"]);
        gdvOrdenesDeTrabajo.DataSource = gestionOrdenDeTrabajo.Listar(mantenedorEstadoOrdenesDeTrabajo.Buscar("R")[0]);
        gdvOrdenesDeTrabajo.DataBind();
        Limpiar();
    }

    protected void ddlProducto_SelectedIndexChanged(object sender, EventArgs e)
    {
        FamiliaProducto f = new FamiliaProducto();
        f.Id = int.Parse(ddlFamilia.SelectedValue);
        Inventario[] inventario = gestionInventario.ListarInventarioDeFamilia(f);
        double inventarioDelProducto = 0;
        foreach (Inventario i in inventario)
        {
            if (i.Producto.Id == int.Parse(ddlProducto.SelectedValue))
            {
                inventarioDelProducto = i.Saldo;

            }
        }

        Session["StockDeProducto"] = inventarioDelProducto;
        txbCantidad.Text = inventarioDelProducto.ToString();
    }
    protected void dtlDetalleOrdenDeTrabajo_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}
